Using apache camel for microservices and integration then deploying and managing on Docker and Kubernetes. When we need to make changes to our app, we can use Fabric8 continuous delivery built on top of Kubernetes and OpenShift.
2. Christian Posta
Principal Middleware Specialist/Architect
Twitter: @christianposta
Blog: http://blog.christianposta.com
Email: christian@redhat.com
• Committer on Apache Camel, Apache ActiveMQ, Fabric8
• Worked with largest Microservices, web-scale, unicorn companies
• Blogger, speaker about DevOps, integration, and microservices
• Currently writing “Microservices for Java developers” for
O’Reilly (June 2016)
Cloud Native Architectures
7. • Trying to incorporate new technology?
• Trying to copy what others (Netflix, Amazon) are
doing?
• Tactical automation?
• Created a “DevOps” team?
• Exploring cloud services?
• Build/deploy automation?
• OpenSource?
• Piecemeal integration?
How are you keeping up with change?
Cloud Native Architectures
8. Cloud Native Architectures
• Faster software delivery
• Own database (data)
• Faster innovation
• Scalability
• Right technology for the
problem
• Test individual services
• Isolation
• Individual deployments
9. Microservices helps solve the problem of
“how do we decouple our services and
teams to move quickly at scale to
deliver business value”
Cloud Native Architectures
11. • If my services are isolated at the process
level, I’m doing #microservices
I’m doing microservices if…
• If I use REST/Thrift/ProtoBuf instead of
SOAP, I’m doing #microservices
• If I use JSON, I’m doing #microservices
• If I use Docker / SpringBoot / Dropwizard /
embedded Jetty, I’m doing #microservices
16. Cloud Native Architectures
Fallacies of distributed computing
• Reliable networking
• Latency is zero
• Bandwidth is infinite
• Network is secure
• Topology doesn’t change
• Single administrator
• Transport cost is zero
• Network is homogenous
https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
21. Cloud Native Architectures
Apache Camel to the rescue!
• Small Java library
• Distributed-system swiss-army knife!
• Powerful EIPs
• Declarative DSL
• Embeddable into any JVM (EAP, Karaf, Tomcat, Spring
Boot, Dropwizard, Wildfly Swarm, no container, etc)
• Very popular (200+ components for “dumb pipes”)
23. Cloud Native Architectures
Apache Camel to the rescue!
• Automatic retries, backoff algorithms
• Dynamic routing
• Powerful testing/mocking framework
• Circuit breakers
• Backpressure mechanisms
• Beautiful REST DSL with built in Swagger support
24. • “Smart endpoints, dumb pipes”
• Endpoint does one thing well
• Metadata used for further routing
• Really “dynamic” with rules engine (eg,
Drools/BRMS)
Dynamic Routing
25. REST DSL
public class OrderProcessorRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
rest().post(“/order/socks”)
.description(“New Order for pair of socks”)
.consumes(“application/json”)
.route()
.to(“activemq:topic:newOrder”)
.log(“received new order ${body.orderId}”)
.to(“ibatis:storeOrder?statementType=Insert”);
}
}
26. • Throttle EIP
• http://camel.apache.org/throttler.html
• Blocking SEDA Queue
• from(“seda:name?size=100&blockWhenFull=true)
• Configure jetty/netty to use blocking acceptor
queues
• https://wiki.eclipse.org/Jetty/Howto/High_Load
• Using Exception handling/retry and DLQ
logic when getting flow controlled
• http://camel.apache.org/error-handling-in-camel.html
Backpressure with Camel
27. Circuit breaker
public class OrderProcessorRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from(“direct:someinterface”)
.loadbalance()
.circuitBreaker(3, 20000L, MyException.class)
.to(“ibatis:storeOrder?statementType=Insert”);
}
}
30. Cloud Native Architectures
Typical problems developing microservices
• How to run them all locally?
• How to package them (dependency management)
• How to test?
• Vagrant? VirtualBox? VMs?
• Specify configuration
• Process isolation
• Service discovery
• Multiple versions?
31. Cloud Native Architectures
Shared infrastructure platforms headaches
• Different teams
• Different rates of change
• VM sprawl
• Configuration drift
• Isolation / multi-tenancy
• Performance
• Real-time vs batch
• Compliance
• Security
• Technology choices
34. Cloud Native Architectures
Immutable infrastructure/deploys
• “we’ll just put it back in Ansible”
• Avoid chucking binaries / configs together and hope!
• Cattle vs Pets
• Don’t change it; replace it
• System created fully from automation; avoid drift
• Eliminate manual configuration/intervention
43. RED HAT JBOSS FUSE
Development and tooling
Develop, test, debug, refine,
deploy
JBoss Developer Studio
Web services framework
Web services standards, SOAP, XML/
HTTP, RESTful HTTP
Integration framework
Transformation, mediation, enterprise
integration patterns
Management and
monitoring
System and web services metrics,
automated discovery, container
status, automatic updates
JBoss Operations Network
+
JBoss Fabric Management
Console
(hawtio)
Apache CXF Apache Camel
Reliable Messaging
JMS/STOMP/NMS/MQTT, publishing-subscribe/point-2-point, store and forward
Apache ActiveMQ
Container
Life cycle management, resource management, dynamic deployment,
security and provisioning
Apache Karaf + Fuse Fabric
RED HAT ENTERPRISE LINUX
Windows, UNIX, and other Linux
46. Cloud Native Architectures
Fuse Integration Services for OpenShift
• Set of tools for integration developers
• Build/package your Fuse/Camel services as Docker
images
• Run locally on CDK
• Deploy on top of OpenShift
• Plugs-in to your existing build/release ecosystem
(Jenkins/Maven/Nexus/Gitlab,etc)
47. Cloud Native Architectures
Fuse Integration Services for OpenShift
• Manage them with Kubernetes/OpenShift
• Flat class loader JVMs
• Take advantage of existing investment into Karaf with
additional options like “just enough app server”
deployments
• Supports Spring, CDI, Blueprint
49. Cloud Native Architectures
Using FIS on Red Hat CDK
• Small VM run locally by developers
• Full access to Docker, Kubernetes, OpenShift
• Deploy your suite of microservices with ease!
• Uses Vagrant/VirtualBox
• Getting Started on Windows! http://bit.ly/1U5xU4z
50. Cloud Native Architectures
Typical problems developing microservices
• How to run them all locally?
• How to package them
• How to test?
• Vagrant? VirtualBox? VMs?
• Specify configuration
• Process isolation
• Service discovery
• Multiple versions?
56. • Trying to incorporate new technology?
• Trying to copy what others (Netflix, Amazon) are
doing?
• Tactical automation?
• Created a “DevOps” team?
• Exploring cloud services?
• Build/deploy automation?
• OpenSource?
• Piecemeal integration?
How are you keeping up with change?
Cloud Native Architectures
57. • 100% open source, ASL 2.0
• Technology agnostic (java, nodejs, python,
golang, etc)
• Built upon decades of industry practices
• 1-click automation
• Cloud native (on premise, public cloud, hybrid)
• Complex build/deploy pipelines (human
workflows, approvals, chatops, etc)
• Comprehensive integration inside/outside the
platform
What if you could do all of this right now
with an open-source platform?
58.
59.
60. • Docker native, built on top of Kubernetes API
• Out of the box CI/CD, management UI
• Logging, Metrics
• ChatOps
• API Management
• iPaaS/Integration
• Chaos Monkey
• Lots and lots of tooling/libraries to make
developing cloud-native applications easier
http://fabric8.io
61.
62.
63. Christian Posta
Principal Middleware Specialist/Architect
Twitter: @christianposta
Blog: http://blog.christianposta.com
Email: christian@redhat.com
Questions
and
Discussion